<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	<script>
	/*	
		目标:进一步理解js中error和错误处理,
		mdn 文档有介绍
	1.错误的类型
		Error:所有错误的父类型,
		ReferenceError:引用的变量不存在,
		TypeError: 数据类型不正确的错误
		RaneError: 数据值不在其所允许的范围内
		SyntaxError:语法错误,
	2.错误处理
		捕获错误:try...catch,
		抛出错误:throw  error,
		
	3.错误对象
		message属性:错误相关的信息,
		stack属性:函数调用栈记录信息,
		
	*/	
   //常见的内置错误
	//1)ReferenceError:引用的变量不存在,
	// console.log(a); // Uncaught ReferenceError: a is not defined
	
	//TypeError: 数据类型不正确的错误
	let b=null;
	//console.log(b.xxx); //TypeError: Cannot read property 'xxx' of null
	
	
	//RaneError: 数据值不在其所允许的范围内
	
	function fn(){
		fn() //递归调用是有一定的次数限制的
	}
	//fn(); //RangeError: Maximum call stack size exceeded
	
	
	//SyntaxError:语法错误,	
		//var c=""hello"; 
		//console.log(c) //SyntaxError: Unexpected identifier
		
	
	
	//2.错误处理
		//捕获错误:try...catch,
		
		
	// try{
	// 	let d;
	// 	console.log(d.xxx);
	// }catch(e){
	// 	console.log(e);
	// 	console.log(e.message);
	// 	console.log(e.stack);
	// }
	
		
		
	//抛出错误:throw  error,
	  function dosomething(){
		  
		  if(Date.now()%2==1){
			  console.log('可以做这个事情')
		  }else{ //如果是偶数抛 
		  
		  
		  
		   出一个异常，有调用者来处理
			  throw new Error ('当前是偶数，无法做这个事情')
		  }
	  }
	//捕获异常
	try{
		dosomething()
	}catch(e){
		alert(e.message);
	}
		
		
	</script>	
	</body>
</html>
